import java.util.Iterator;
import java.util.List;

import javax.swing.JFrame;

import org.apache.torque.TorqueException;

import torque.generated.Vaisseau;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JSplitPane;


public class VueCreationVaisseau extends Vue{
	private JLabel lblAttaque;
	private JLabel lblInfos;
	private JTextField txtFieldDegat;
	private JTextField txtFieldChampForce;
	private JTextField txtFieldEnergie;
	private JSplitPane splitPane;
	private JButton btnEnregistrer;
	private JButton btnAnnuler;
	private JTextField txtFieldAttaque;
	private JLabel lblDegat;
	private JLabel lblChampForce;
	private JLabel lblEnergie;
	private JTextField textFieldNom;
	private JLabel lblNom;
	
	public VueCreationVaisseau(Controleur controleur) throws Exception{
		super(controleur);
		setTitle("Création de vaisseau");
		// Affichage de la fenêtre non redimensionable
		setLocationRelativeTo(this.getParent());
		setVisible(true);
		setResizable(false);
		// Affectation de la dimension minimale pour la fenêtre
		Dimension dimWindowMini = new Dimension();
		dimWindowMini.height = 285;
		dimWindowMini.width = 380;
		setMinimumSize(dimWindowMini);
		// Ajout du layout a la fenêtre (position absolue)
		getContentPane().setLayout(null);
		
		lblInfos = new JLabel("Saisissez les caractéristiques de votre vaisseau :");
		lblInfos.setBounds(12, 12, 361, 15);
		Dimension dimLabelMini = new Dimension();
		dimLabelMini.height = 15;
		dimLabelMini.width = 360;
		
		lblNom = new JLabel("Nom du vaisseau :");
		lblNom.setBounds(12, 39, 179, 15);
		getContentPane().add(lblNom);
		lblInfos.setMinimumSize(dimLabelMini);
		getContentPane().add(lblInfos);
		
		lblAttaque = new JLabel("Points d'attaque :");
		lblAttaque.setBounds(12, 97, 179, 15);
		getContentPane().add(lblAttaque);
		
		lblDegat = new JLabel("Points de dégats :");
		lblDegat.setBounds(12, 127, 179, 15);
		getContentPane().add(lblDegat);
		
		lblChampForce = new JLabel("Points de champ de force :");
		lblChampForce.setBounds(12, 154, 217, 15);
		getContentPane().add(lblChampForce);
		
		lblEnergie = new JLabel("Points d'énergie :");
		lblEnergie.setBounds(12, 181, 179, 15);
		getContentPane().add(lblEnergie);
		
		textFieldNom = new JTextField();
		textFieldNom.setBounds(12, 66, 349, 19);
		getContentPane().add(textFieldNom);
		textFieldNom.setColumns(10);
		
		txtFieldAttaque = new JTextField();
		txtFieldAttaque.setBounds(247, 97, 61, 19);
		getContentPane().add(txtFieldAttaque);
		txtFieldAttaque.setColumns(10);
		
		txtFieldDegat = new JTextField();
		txtFieldDegat.setColumns(10);
		txtFieldDegat.setBounds(247, 128, 61, 19);
		getContentPane().add(txtFieldDegat);
		
		txtFieldChampForce = new JTextField();
		txtFieldChampForce.setColumns(10);
		txtFieldChampForce.setBounds(247, 154, 61, 19);
		getContentPane().add(txtFieldChampForce);
		
		txtFieldEnergie = new JTextField();
		txtFieldEnergie.setColumns(10);
		txtFieldEnergie.setBounds(247, 181, 61, 19);
		getContentPane().add(txtFieldEnergie);
		
		splitPane = new JSplitPane();
		splitPane.setBounds(12, 212, 276, 27);
		getContentPane().add(splitPane);
		
		btnEnregistrer = new JButton("Enregistrer");
		btnEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent action) {
				Integer ptAttaque = Integer.parseInt(txtFieldAttaque.getText());
				Integer ptDegat = Integer.parseInt(txtFieldDegat.getText());
				Integer ptChampForce = Integer.parseInt(txtFieldChampForce.getText());
				Integer ptEnergie = Integer.parseInt(txtFieldEnergie.getText());
				if(textFieldNom.getText()==""){
					IO.Message("Erreur : Le nom du vaisseau ne peux pas être vide");
					}
				else{
					if(ptAttaque<0
							&& ptDegat<0
							&& ptChampForce<0
							&& ptEnergie<0
							&& ptAttaque + ptDegat + ptChampForce + ptEnergie!=40){
							IO.Message("Erreur : La somme des points doit être égale à 40 et une caractéristique suppérieure a 1");
						}else{
							List<Vaisseau> listeVaisseau = null;
							try {
								listeVaisseau = getControleur().getVaisseaux();
							} catch (TorqueException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
							Boolean existeVaisseau = false;
							if(listeVaisseau.size()!=0){
								for (Iterator<Vaisseau> iter = listeVaisseau.iterator(); iter.hasNext();) {
									Vaisseau vaisseau1 = iter.next();
									String nomVaisseau1 = vaisseau1.getNomv();
									if (nomVaisseau1==textFieldNom.getText()){
										existeVaisseau=true;
									}
								}
							}
							if(existeVaisseau){
								IO.Message("Un vaisseau avec le même nom existe déjà, merci de changer de nom");
							}else{
								Vaisseau vASauver = new Vaisseau();
								try {
									vASauver.setNomv(textFieldNom.getText());
								} catch (TorqueException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
								vASauver.setPtattaque(ptAttaque);
								vASauver.setPtdegat(ptDegat);
								vASauver.setPtchampforce(ptChampForce);
								vASauver.setPtenergie(ptEnergie);
								try {
									getControleur().sauvVaisseau(vASauver);
									IO.Message("Le vaisseau a été sauvegardé");
									VueCreationVaisseau.this.retourMenu();
								} catch (Exception e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						}
				}

			}
		});
		splitPane.setRightComponent(btnEnregistrer);
		
		btnAnnuler = new JButton("Annuler");
		btnAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					getControleur().lancerVueMenuJeu();
					getControleur().fermerVue(VueCreationVaisseau.this);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		
		splitPane.setLeftComponent(btnAnnuler);
			//this.afficherInterfaceCreation();
	}

	protected void retourMenu() {
		// TODO Auto-generated method stub
		getControleur().fermerVue(VueCreationVaisseau.this);
		try {
			getControleur().lancerVueMenuJeu();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}
